/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.webhomesites.locacao.model;

import br.com.webhomesites.padrao.utils.ManipuladorDatas;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Webhome
 */
public class DevolucaoBO {

    public double calcularValorPagar(double valorTotal, double valorDesconto, double porcentoDesconto, String tipoDesconto) {
        switch (tipoDesconto) {
            case "valor": {
                double valorPagar = valorTotal - valorDesconto;
                return valorPagar;
            }
            case "porcento": {
                double valorPagar = valorTotal - ((valorTotal / 100) * porcentoDesconto);
                return valorPagar;
            }
            default:
                return 0;
        }

    }

    public double calcularPorcentagemDesconto(double valorTotalLocacao, double valorTotalPagar) {
        System.out.println("A porcentagem é: " + (100 - ((valorTotalPagar / valorTotalLocacao) * 100)));
        return (100 - ((valorTotalPagar / valorTotalLocacao) * 100));
    }

    public double calcularValorDesconto(double valorTotalLocacao, double valorTotalPagar) {
        System.out.println("O desconto é: " + (valorTotalLocacao - valorTotalPagar));
        return (valorTotalLocacao - valorTotalPagar);
    }

    public static double calcularValorAPagar(double valorPrevisto, int diasPrevisto, int diasCalculado) {
        if (diasCalculado >= diasPrevisto) {
            return (valorPrevisto / diasPrevisto) * diasCalculado;
        } else {
            return valorPrevisto;
        }
    }

    public static LocacaoModel verificarSituacaoItem(List<ItemLocacaoModel> listaItemLocacaoModel, LocacaoModel locacaoModel) {

        double valorPagar = 0.00;
        int diasCalculados = 0;
        diasCalculados = ManipuladorDatas.diferencaEntreDatas(locacaoModel.getDataLocacao(), ManipuladorDatas.getDataAtual());

        for (ItemLocacaoModel listaItem : listaItemLocacaoModel) {
            System.out.println("Verificando item... ");
            System.out.println("Status " + listaItem.getStatusItem());
            System.out.println("Pagamento " + listaItem.getPagamentoItem());
            if (listaItem.getStatusItem().contains("A") && listaItem.getPagamentoItem().contains("N")) {

                valorPagar = valorPagar + (listaItem.getValorItem() * diasCalculados);
                System.out.println("Valor a pagar " + valorPagar);
                locacaoModel.setValorTotalCalculado(valorPagar);
            }
        }
        return locacaoModel;
    }

    public static void devolverItem(List<ItemLocacaoModel> listaItemLocacaoModel, LocacaoModel locacaoModel) {

        ItemLocacaoDAO itemLocacaoDAO = new ItemLocacaoDAO();
        DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

        for (ItemLocacaoModel listaItem : listaItemLocacaoModel) {
            if (listaItem.getStatusItem().contains("A")) {
                try {
                    listaItem.setStatusItem("D");
                    listaItem.setDataDevolucao((Date) formatter.parse(formatter.format(ManipuladorDatas.getDataAtual())));
                } catch (ParseException ex) {
                    Logger.getLogger(DevolucaoBO.class.getName()).log(Level.SEVERE, null, ex);
                }
                itemLocacaoDAO.update(listaItem);
            }
        }
    }

    public static LocacaoModel calcularDevolucaoParcialLocacao(List<ItemLocacaoModel> listaItemLocacaoModel, LocacaoModel locacaoModel) {
        
        double valorTotalCalculado = 0.00;
        double valorTotal = 0.00;
        int diasCalculados = 0;
        diasCalculados = ManipuladorDatas.diferencaEntreDatas(locacaoModel.getDataLocacao(), ManipuladorDatas.getDataAtual());

        for (ItemLocacaoModel listaItem : listaItemLocacaoModel) {
            System.out.println("Verificando item... ");
            System.out.println("Status " + listaItem.getStatusItem());
            System.out.println("Pagamento " + listaItem.getPagamentoItem());

            if (listaItem.getStatusItem().contains("A") && listaItem.getPagamentoItem().contains("N")) {
                System.out.println("Valor Item " + listaItem.getValorItem());
                System.out.println("Valor Produto " + listaItem.getValorDoProduto());
                valorTotalCalculado = valorTotalCalculado + (listaItem.getValorDoProduto() * diasCalculados);
                valorTotal = valorTotal + (listaItem.getValorDoProduto() * locacaoModel.getDiasLocacao());
                System.out.println("Valor a pagar " + valorTotalCalculado);
                locacaoModel.setValorParcialCalculado(valorTotalCalculado);
                locacaoModel.setValorParcialPrevisto(valorTotal);
            }

        }
        return locacaoModel;
    }
    
    public static RenovacaoLocacaoModel calcularDevolucaoParcialRenovacao(List<ItemLocacaoModel> listaItemLocacaoModel, RenovacaoLocacaoModel renovacaoLocacaoModel) {

        double valorTotalCalculado = 0.00;
        double valorTotal = 0.00;
        int diasCalculados = 0;
        diasCalculados = ManipuladorDatas.diferencaEntreDatas(renovacaoLocacaoModel.getDataRenovacao(), ManipuladorDatas.getDataAtual());

        for (ItemLocacaoModel listaItem : listaItemLocacaoModel) {
            System.out.println("Verificando item... ");
            System.out.println("Status " + listaItem.getStatusItem());
            System.out.println("Pagamento " + listaItem.getPagamentoItem());

            if (listaItem.getStatusItem().contains("A") && listaItem.getPagamentoItem().contains("S")) {
                System.out.println("Valor Item " + listaItem.getValorItem());
                System.out.println("Valor Produto " + listaItem.getValorDoProduto());
                valorTotalCalculado = valorTotalCalculado + (listaItem.getValorDoProduto() * diasCalculados);
                valorTotal = valorTotal + (listaItem.getValorDoProduto() * renovacaoLocacaoModel.getDiasLocacao());
                System.out.println("Valor a pagar " + valorTotalCalculado);
                renovacaoLocacaoModel.setValorParcialCalculado(valorTotalCalculado);
                
                renovacaoLocacaoModel.setValorParcialPrevisto(valorTotal);
                System.out.println("Valor Parcial previsto " + renovacaoLocacaoModel.getValorParcialPrevisto());
            }

        }
        return renovacaoLocacaoModel;
    }

    public static boolean verificarItensDevolviveisEPagaveis(List<ItemLocacaoModel> listaItemLocacaoModel, LocacaoModel locacaoModel) {

        for (ItemLocacaoModel listaItem : listaItemLocacaoModel) {
            System.out.println("Verificando item... ");
            System.out.println("Status " + listaItem.getStatusItem());
            System.out.println("Pagamento " + listaItem.getPagamentoItem());
            if (!(listaItem.getStatusItem().contains("A") && listaItem.getPagamentoItem().contains("N"))) {
                return false;
            }
        }
        return true;
    }

    public static boolean verificarItensDevolviveis(List<ItemLocacaoModel> listaItemLocacaoModel, LocacaoModel locacaoModel) {

        for (ItemLocacaoModel listaItem : listaItemLocacaoModel) {
            System.out.println("Verificando item... ");
            System.out.println("Status " + listaItem.getStatusItem());
            System.out.println("Pagamento " + listaItem.getPagamentoItem());
            if (!(listaItem.getStatusItem().contains("A"))) {
                return false;
            }
        }
        return true;
    }
    
    public static boolean verificarDevolucaoTotal(List<ItemLocacaoModel> listaItemLocacaoModel, LocacaoModel locacaoModel) {

        for (ItemLocacaoModel listaItem : listaItemLocacaoModel) {
            System.out.println("Verificando item... ");
            System.out.println("Status " + listaItem.getStatusItem());
            System.out.println("Pagamento " + listaItem.getPagamentoItem());
            if (!(listaItem.getStatusItem().contains("D"))) {
                return false;
            }
        }
        return true;
    }   
    

    public static boolean verificarDevolucaoTotalEPagamento(List<ItemLocacaoModel> listaItemLocacaoModel) {

        for (ItemLocacaoModel listaItem : listaItemLocacaoModel) {
            System.out.println("Verificando item... ");
            System.out.println("Status do item " + listaItem.getStatusItem());
            System.out.println("Pagamento do item " + listaItem.getPagamentoItem());
            if ((listaItem.getStatusItem().contains("D"))) {
                System.out.println("####################################################### ");
                return true;
            }
        }
        return false;
    }
}
